import {generateRandomString}  from './randomString.js';
// 封装 uni.request 方法为 Promise 形式
function requestPromise(url, method, data = {}, header = {}) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: url,
      method: method,
      data: data,
      header: header,
      success: (res) => {
        resolve(res); // 请求成功，使用 resolve 返回结果
      },
      fail: (err) => {
        reject(err); // 请求失败，使用 reject 返回错误信息
      }
    });
  });
}

// 获取在线域名
export async function getOnlineDomain() {
  try {
    const res = await requestPromise('https://thomasinebeckham.oss-cn-hongkong.aliyuncs.com/api.json', 'GET');
    //console.log('域名', res); // 打印完整的 response 对象

    if (res.statusCode === 200) {
      const data = res.data;
      const domainNames = data.domainNames; // 假设 API 返回一个包含域名的数组
      const randomIndex = Math.floor(Math.random() * domainNames.length);
      console.log('匹配到可用域名:', domainNames[randomIndex]);
      return domainNames[randomIndex];
    } else {
      throw new Error('没有获取到域名');
    }
  } catch (error) {
    console.error(error);
    // 返回默认值或者处理错误情况
    return 'hongh.store';
  }
}

// 获取随机域名
export async function fetchRandomDomain(retries = 0, maxRetries = 20) {
  if (retries >= maxRetries) {
    //console.log('已达到最大重试次数，放弃获取随机域名');
    return 'hongh.store';
  }
  try {
    const HostOK = await getRandomBaseHost();
    if (HostOK) {
      return HostOK;
    } else {
      //console.log('域名不可用，重试获取随机域名');
      return fetchRandomDomain(retries + 1, maxRetries);
    }
  } catch (error) {
    //console.error('获取随机域名时发生错误:', error);
    return 'hongh.store';
  }
}

// 拼接随机域名
export async function getRandomBaseHost() {
  try {
    const randomDomain = await getOnlineDomain();
    const randomValue = generateRandomString(8);
    const Host = `https://${randomValue}.${randomDomain}:1433`;

    const checkUrl = Host + '/domain_reuest.php';
    const response = await requestPromise(checkUrl, 'GET', {}, {}, 2000); // 设置超时时间为2秒，单位为毫秒
    //console.log('打印状态码',response.statusCode); // 打印完整的 response 对象

    if (response.statusCode === 200) {
		let domain = Host;
		console.log('此处获取到的域名',domain);
		return domain;
    } else {
      console.log(checkUrl);
      return '';
    }
  } catch (error) {
    console.error('获取随机域名时发生错误:', error);
    return '';
  }
}
